package day26.homework;

/**
 * Student类的测试类
 * 用于测试Student类的基本功能和AgeOutRangeException异常处理
 * 
 * 该测试类包含了多个测试用例：
 * 1. 正常年龄范围内的学生对象创建
 * 2. 年龄过小的异常情况处理
 * 3. 年龄过大的异常情况处理
 * 4. 通过setter方法设置年龄的正常和异常情况
 */
public class StudentTest {
    /**
     * 程序入口点
     * 包含了完整的测试流程，用于验证Student类的各种功能
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        try {
            // 测试正常年龄范围内的学生对象创建
            // 预期年龄20在合法范围内，应正常创建对象
            Student student1 = new Student("张三", 20);
            System.out.println("创建学生成功: " + student1);
            
            // 测试年龄过小的情况（年龄小于18岁）
            // 预期会抛出AgeOutRangeException异常并被捕获
            try {
                Student student2 = new Student("李四", 10);
                System.out.println("创建学生成功: " + student2);
            } catch (AgeOutRangeException e) {
                // 捕获年龄过小的异常，并输出异常信息
                System.out.println("捕获异常（年龄过小）: " + e.getMessage());
            }
            
            // 测试年龄过大的情况（年龄大于60岁）
            // 预期会抛出AgeOutRangeException异常并被捕获
            try {
                Student student3 = new Student("王五", 80);
                System.out.println("创建学生成功: " + student3);
            } catch (AgeOutRangeException e) {
                // 捕获年龄过大的异常，并输出异常信息
                System.out.println("捕获异常（年龄过大）: " + e.getMessage());
            }
            
            // 测试通过setter方法设置合法年龄
            // 先创建无参学生对象，再通过setter方法设置合法年龄
            Student student4 = new Student();
            student4.setName("赵六");
            student4.setAge(25); // 年龄25在合法范围内
            System.out.println("通过setter设置学生信息成功: " + student4);
            
            // 测试通过setter方法设置非法年龄（年龄小于18岁）
            // 预期会抛出AgeOutRangeException异常并被捕获
            try {
                Student student5 = new Student();
                student5.setName("孙七");
                student5.setAge(15); // 年龄15小于最小合法年龄18岁
                System.out.println("设置学生信息成功: " + student5);
            } catch (AgeOutRangeException e) {
                // 捕获通过setter设置非法年龄的异常，并输出异常信息
                System.out.println("捕获异常（setter设置非法年龄）: " + e.getMessage());
            }
            
        } catch (AgeOutRangeException e) {
            // 捕获主try块中可能抛出的年龄范围异常
            System.out.println("捕获异常: " + e.getMessage());
        }
        
        // 输出测试完成信息，标识所有测试用例执行完毕
        System.out.println("测试完成");
    }
}